home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
wdwmanag.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
34KB
|
739 lines
DEFINITION MODULE WdwManager;
(*$Z+*)
FROM SYSTEM IMPORT LOC, ADDRESS;
FROM GrafBase IMPORT Rectangle, LongRect;
CONST
UP = 0;
DOWN = 1;
RIGHT = 0;
LEFT = 1;
HDRFIRST = 0;
HDRNEXT = 1;
TYPE
handleMessProc = PROCEDURE (ADDRESS, BITSET) : BOOLEAN;
(* pBuff, kstate *)
handleGlobalKeyProc = PROCEDURE (INTEGER, CHAR, CHAR, BITSET) : BOOLEAN;
(* taste, key, scan, kstate *)
handleButtonProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, INTEGER, INTEGER, BITSET, BITSET, INTEGER) : BOOLEAN;
(* wdw, vdiH, special, mx, my, kstate, buttons, clicks *)
handleKeyProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, INTEGER, CHAR, CHAR, BITSET) : BOOLEAN;
(* wdw, vdiH, special, taste, key, scan, kstate *)
handleTimerProc = PROCEDURE (INTEGER, INTEGER, ADDRESS) : BOOLEAN;
(* wdw, vdiH, special *)
handleRectProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, INTEGER,
INTEGER, INTEGER) : BOOLEAN;
(* wdw, vdiH, special, which, moX, moY *)
getRectEventProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, VAR Rectangle, VAR INTEGER): BOOLEAN;
(* wdw, vdiH, special, rect, type
* type = leave oder enter
*)
snapProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, VAR Rectangle);
(* wdw, vdiH, special, wdwRect
* Es wird die Workarea des Fensters bergeben
*)
closeProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, BOOLEAN) : BOOLEAN;
(* wdw, vdiH, special, force
* Gibt zurck, ob das Fenster komplett geschlossen werden soll
* oder nicht!
* Bei force = TRUE wird das Fenster danach definitiv geschlossen,
* d.h. dann wird das Ergebnis ignoriert! Wird aber nur am Programm-
* ende so aufgerufen, wenn das Fenster noch nicht geschlossen wurde.
*)
topProc = PROCEDURE (INTEGER, INTEGER, ADDRESS) : BOOLEAN;
(* wdw, vdiH, special
* Wird aufgerufen, wenn das Fenster getoppt wurde.
* gibt zurck, ob das fenster getoppt werden soll oder
* nicht.
*)
untopProc = PROCEDURE (INTEGER, INTEGER, ADDRESS);
(* wdw, vdiH, special
* Wird aufgerufen, um den Clienten darber zu informieren,
* das sein Fenster nicht mehr das topWindow ist
*)
drawProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, Rectangle);
(* wdw, vdiH, special, clip
* Clipping ist schon gesetzt
*)
updateProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, BOOLEAN);
(* wdw, vdiH, special, begin
*)
setWorkProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, LongRect, BOOLEAN);
(* wdw, vdiH, special, document, slidedJN
*)
getRectProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, VAR Rectangle);
(* wdw, vdiH, special, wdwWork
*)
hideProc = PROCEDURE (INTEGER, INTEGER, ADDRESS, BOOLEAN);
(* wdwH, vdiH, special, hide.
* Wird aufgerufen, wenn das Fenster nur versteckt
* wird (mit wind_close) oder wenn es ikonifiziert
* wird. hide = TRUE: Fenster wird versteckt.
*)
handleNewTopProc = PROCEDURE (INTEGER);
(* globale Prozedur, wird aufgerufen, wenn ein neues Fenster
* zum Topwindow wird. Bekommt das Handle des neuen TopWindows
* bergeben
*)
handleEventProc = PROCEDURE (INTEGER);
(* globale Prozedur, wird jedesmal nach der Abarbeitung der Events
* aufgerufen. Bekommt als Parameter das WindowHandle des TopWindows
* bergeben.
*)
getExtsProc = PROCEDURE (INTEGER, ADDRESS, VAR ARRAY OF CHAR);
(* wdw, special, Extension Data
* Das Fenster mu in data seine Extension Daten fr
* Drag & Drop zurckliefern
*)
acceptDataProc = PROCEDURE (INTEGER, ADDRESS, ADDRESS): BOOLEAN;
(* wdw, special, hdr
* Beim Fenster wird angefragt, ob es die Daten
* mit dem Header akzeptiert
*)
writeDataProc = PROCEDURE (INTEGER, ADDRESS, VAR ADDRESS, LONGCARD);
(* wdw, special, data, dataLen
* Dem Fenster werden die Daten in data geschickt
* Dieses hat die dann entsprechend zu behandeln
*)
readDataProc = PROCEDURE (INTEGER, ADDRESS, VAR ADDRESS);
(* wdw, special, data
* Das Fenster wird dazu aufgefordert, die
* Adresse der Daten zu liefern
*)
getHeaderProc = PROCEDURE (INTEGER, ADDRESS, INTEGER,
VAR ARRAY OF CHAR,
VAR ARRAY OF CHAR,
VAR LONGCARD): BOOLEAN;
(* wdw, special, mode, ext, name, size
* Das Fenster soll die Headerdaten liefern
* mode ist entweder HDRFIRST oder HDRNEXT
* Falls keine Daten mehr da sind, soll FALSE
* zurckgegeben werden
*)
queueTestProc = PROCEDURE (INTEGER) : BOOLEAN;
(* wdw wird bergeben
*)
TYPE
ptrWdwSlot;
(* ---------------------------------------------------------------------*)
(* Variablen *)
VAR theTopWindow : INTEGER; (* Enthlt immer die Nummer des Topwindows
* Wird in HandleEvent upgedatet
*)
ownTopWindow : INTEGER; (* Enthlt immer die Nummer des Topwindows
* von CAT, also des eigenen, hchsten
* Fensters. Mu nicht mit theTopWindow
* identisch sein!
*)
handleNewTop : handleNewTopProc; (* Siehe Kommentar zu Typ *)
handlePostEvent : handleEventProc; (* Siehe Kommentar zu Typ *)
deskSize : Rectangle; (* Die Ausmae des Desktops *)
(* ---------------------------------------------------------------------*)
(* Ein paar allgemeine Rechteck- und Clip-Funktionen *)
PROCEDURE SetClip (hdl : INTEGER; clip : ARRAY OF LOC; relative : BOOLEAN);
(* Setzt das Clipping-Rechteck fr die workstation.
* Wenn relative = TRUE ist, wird das Rechteck noch umgewandelt in
* ein absolutes Rechteck ( (x, y, w, h) ==> (x, y, x2, y2))
*)
PROCEDURE RectList (wdw: INTEGER; flag: INTEGER;
VAR work: Rectangle): BOOLEAN;
(* Liefert die Rechteckliste fr das Fenster.
* Flag = 0: Erstes Rechteck liefern.
* Flag = 1: Nchstes Rechteck liefern.
* In work wird das Rechteck zurckgegeben.
* TRUE = Es ist noch ein Rechteck vorhanden
*)
PROCEDURE RectListActive (): BOOLEAN;
(* Gibt zurck, ob gerade eine Rechteckliste abgearbeitet wird
*)
(* ---------------------------------------------------------------------*)
PROCEDURE CreateWindow (fullSize : Rectangle; VAR currSize : Rectangle;
wdwParts : BITSET; REF info, titel : ARRAY OF CHAR;
env : ADDRESS; supportIconify: BOOLEAN;
openWorkstation: BOOLEAN;
VAR wdwHandle, vdiHandle : INTEGER): BOOLEAN;
(* Erzeugt ein Fenster, das mit Default-Prozeduren behandelt wird.
* Weitere Einstellungen mu man danach vornehmen
*)
PROCEDURE SetWindowDraw (wdw: INTEGER; draw: drawProc): BOOLEAN;
(* Setzt die Zeichenprozedur fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowSnap (wdw: INTEGER; snap: snapProc): BOOLEAN;
(* Setzt die Snapprozedur fr ein Fenster. Diese wird dann
* bei jedem Sizen und einmal direkt mit den aktuellen Werten
* aufgerufen. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowButton (wdw: INTEGER; button: handleButtonProc): BOOLEAN;
(* Setzt den Buttonhandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowKey (wdw: INTEGER; key: handleKeyProc): BOOLEAN;
(* Setzt den Keyhandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowTimer (wdw: INTEGER; timer: handleTimerProc): BOOLEAN;
(* Setzt den Timerhandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowRectProc (wdw: INTEGER; rect: handleRectProc): BOOLEAN;
(* Setzt den Rechteckhandler fr ein Fenster.
* False: Fenster nicht gefunden
*)
PROCEDURE SetWindowClose (wdw: INTEGER; close: closeProc): BOOLEAN;
(* Setzt den Closehandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowTop (wdw: INTEGER; top: topProc): BOOLEAN;
(* Setzt den Tophandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowUntop (wdw: INTEGER; untop: untopProc): BOOLEAN;
(* Setzt den Untophandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowUpdate (wdw: INTEGER; update: updateProc): BOOLEAN;
(* Setzt den Updatehandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowSwork (wdw: INTEGER; setWdw: setWorkProc): BOOLEAN;
(* Setzt den Handler fr Dokumentnderungen im Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowGetScroll (wdw: INTEGER; getScroll: getRectProc): BOOLEAN;
(* Setzt den GetScrollRect-Handler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowHide (wdw: INTEGER; hide: hideProc): BOOLEAN;
(* Setzt den Hidehandler fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowPixOff (wdw: INTEGER; pixelOffset: INTEGER): BOOLEAN;
(* Setzt den linken Offset fr ein Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowMode (wdw: INTEGER; onlyThisTop: BOOLEAN): BOOLEAN;
(* Setzt den Modus fr ein Fenster. False: Fenster nicht gefunden oder
* es ist schon ein anderes Fenster als einziges das Topwindow.
*)
PROCEDURE SetWindowDial (wdw: INTEGER; dial: ADDRESS): BOOLEAN;
(* Setzt die Dialogadresse fr das Fenster. False: Fenster nicht gefunden
*)
PROCEDURE SetWindowMenu (wdw: INTEGER; menu: ADDRESS): BOOLEAN;
(* Setzt die Menuadresse fr das Fenster. False: Fenster nicht gefunden
*)
PROCEDURE OpenWindow (button : handleButtonProc; key : handleKeyProc; timer : handleTimerProc;
fullSize : Rectangle; VAR currSize : Rectangle; wdwParts : BITSET;
wdwSnap : BOOLEAN; REF info, titel : ARRAY OF CHAR;
snapP : snapProc; close : closeProc; draw : drawProc; top : topProc;
untop : untopProc; update : updateProc; setWdw : setWorkProc;
getScroll : getRectProc; hide : hideProc;
pixelOffset : INTEGER; env : ADDRESS;
onlyThisTop : BOOLEAN; showIt : BOOLEAN;
supportIconify: BOOLEAN; openWorkstation: BOOLEAN;
VAR wdwHandle, vdiHandle : INTEGER): BOOLEAN;
(* Erluterung der Parameter:
* button: Diese Prozedur wird dann aufgerufen, wenn ein Button-Event aufgetreten ist
* und dieser im Workbereich des Fensters lag. Es ist auch mglich,
* handleButtonProc (NIL) zu bergeben.
* key: Diese Prozedur wird dann aufgerufen, wenn das Fenster das TopWindow ist
* und ein Keyboard-Event aufgetreten ist. Es ist auch mglich, handleKeyProc (NIL)
* zu bergeben, dann wird diese nicht aufgerufen.
* timer: Diese Prozedur wird aufgerufen, wenn ein Timer-Event aufgetreten ist.
* Man kann auch handleTimerProc (NIL) bergeben, dann wird nichts ausgefhrt.
* fullSize,
* currSize : Die Auenrechtecke. fullSize ist die maximale Gre des Fensters, currSize
* die Gre, mit der das Fenster geffnet werden soll.
* wdwParts : Ein Set der Window-Elemente (MagicAES.D)
* wdwSnap : Wenn TRUE bergeben wird, wird beim Verndern der Gre und der Position des
* Fensters die Prozedur snapP aufgerufen. Diese mu dann installiert sein!
* info,
* titel : Die Strings, die als Titelzeile bzw. als Infozeile angezeigt werden sollen.
* snapP: Diese Prozedur wird aufgerufen, wenn wdwSnap = TRUE ist und das Fenster in der Gre
* verndert wurde oder verschoben wurde. Nur, wenn wdwSnap = FALSE ist, darf man auch
* einen NIL-Pointer bergeben.
* close: Diese Prozedur wird aufgerufen, wenn ein CloseEvent aufgetreten ist oder CloseWindow
* aufgerufen wurde. Nur, wenn close TRUE zurckgibt, wird das Fenster auch geschlossen.
* CloseWindow darf von close NICHT aufgerufen werden. Diese Prozedur mu vorhanden sein,
* ein NIL-Pointer ist nicht zulssig!
* top: Diese Prozedur wird aufgerufen, wenn das Fenster getoppt werden soll. Nur, wenn TRUE zurck-
* gegeben wird, wird das Fenster auch getoppt. Diese Prozedur mu vorhanden sein,
* ein NIL-Pointer ist nicht zulssig!
* untop: Diese Prozedur wird aufgerufen, wenn das Fenster enttopped wurde. Es ist auch mglich,
* NIL zu bergeben.
* update: Diese Prozedur wird aufgerufen, wenn Ausgaben in das Fenster gemacht werden sollen. Vor
* den Ausgaben wird update (..., MagicAES.BEG_UPDATE) aufgerufen, am Ende der Ausgaben
* update (..., MagicAES.END_UPDATE). Diese Prozedur mu vorhanden sein,
* ein NIL-Pointer ist nicht zulssig!
* setWdw: Diese Prozedur wird aufgerufen, wenn sich intern die Position des virtuellen Fensters
* auf dem Dokument verndert hat. Wenn das durch Scrollen geschah, dann ist slided TRUE.
* Diese Prozedur mu vorhanden sein, ein NIL-Pointer ist nicht zulssig!
* getScroll: Diese Prozedur mu das Rechteck zurckliefern, in dem das Fenster gescrollt werden darf.
* Es wird die aktuelle Arbeitsflche des Fensters (WorkArea) bergeben und es mu
* eine Flche zurckgegeben werden, in der das Scrollen erlaubt ist.
* Es ist auch mglich, die Arbeitsflche ohne Einschrnkungen zurckzugeben.
* Es wird keine berprfung gemacht, ob das Rechteck vernnftige Werte enthlt,
* man sollte also darauf achten, da man keine unsinnigen Werte zurckgibt.
* Diese Prozedur mu vorhanden sein, ein NIL-Pointer ist nicht zulssig!
* hide: Diese Prozedur wird aufgerufen, wenn das Fenster entweder mittels HideWindow
* versteckt wird oder wenn es iconifiziert wird. Die Prozedur sollte gesetzt
* sein, mu es aber nicht.
* pixelOffset: Um diesen Offset wird der Fensterinhalt beim Zeichnen versetzt gezeichnet.
* Dieser mu den internen Scrollroutinen bekannt sein, da es sont Probleme
* gibt.
* env: Ein beliebiger Parameter, der an die Serviceroutinen zurck bergeben wird. Kann auch
* ein Pointer auf eine Struktur sein.
* onlyThisTop: Wenn dieser Parameter TRUE ist, dann wird nur dieses Fenster getoppt
* und kein anderes. Ntzlich fr modale Fensterdialoge.
* showIt: Wenn dieser Parameter TRUE ist, dann wird das Fenster auch direkt geffnet.
* Ansonsten mu extra noch ShowWindow aufgerufen werden.
* Rckgabewerte:
* wdwHandle: Das Handle des Fensters. Nur gltig, falls TRUE zurckgegeben wird.
* vdiHandle: Das Handle der zugeordneten Workstation. Nur gltig, falls TRUE zurckgegeben wird.
*)
PROCEDURE ShowWindow (wdw: INTEGER): BOOLEAN;
(* Ein vorhandenes, aber nicht geffnetes Fenster wird geffnet.
* Geht nicht mit iconifizierten Windows! Die hideProc fr das Fenster
* wird aufgerufen.
* FALSE: Window nicht vorhanden oder ist schon offen.
*)
PROCEDURE HideWindow (wdw: INTEGER): BOOLEAN;
(* Ein offenes Fenster wird geschlossen, aber nicht gelscht.
* Die hideProc fr das Fenster wird aufgerufen.
* Das Window wird dadurch nicht iconifiziert!
* FALSE: Window nicht vorhanden oder ist schon geschlossen oder ikonifiziert.
*)
PROCEDURE SendCloseWindow (wdw : INTEGER);
(* Sendet eine Schlienachricht an das Fenster
* Geht sowohl fr eigene als auch fr fremde Fenster, wenn
* diese in der Fensterliste vorhanden sind oder ein TOS
* luft, das die Abfrage der ID zum Fenster erlaubt.
*)
PROCEDURE CloseWindow (wdw : INTEGER; force : BOOLEAN) : BOOLEAN;
(* Schliet Fenster und entfernt die Handler aus der Liste
* Bei force = TRUE wird das Fenster dann garantiert geschlossen!
* Falls das Fenster nicht vom Modul verwaltet wird, aber trotzdem
* in der WindowQueue enthalten ist, dann wird an das Fenster
* eine Close-Nachricht geschickt.
*)
PROCEDURE CloseAllWindows (force : BOOLEAN): BOOLEAN;
(* Schliet alle Fenster, die dem Modul bekannt sind.
* Die Fenster werden alle ber CloseWindow geschlossen,
* und falls ein CloseWindow FALSE zurckliefert, dann
* wird der Returnwert zurckgegeben und abgebrochen.
*)
PROCEDURE FullWindow (wdw : INTEGER);
(* Tut so, als ob das Fenster eine Fulled-Nachricht erhalten htte.
* Falls das Fenster nicht vom Modul verwaltet wird, aber trotzdem
* in der WindowQueue enthalten ist, dann wird an das Fenster
* eine Fulled-Nachricht geschickt.
*)
PROCEDURE TopWindow (wdw : INTEGER);
(* Tut so, als ob das Fenster eine Topped-Nachricht erhalten htte.
* Falls das Fenster nicht vom Modul verwaltet wird, aber trotzdem
* in der WindowQueue enthalten ist, dann wird an das Fenster
* eine Topped-Nachricht geschickt.
*)
PROCEDURE HandleEvent ( VAR event : BITSET; VAR pbuff : ARRAY OF LOC; buts, kstate : BITSET; key, scan : CHAR;
taste, mx, my, clicks : INTEGER) : BOOLEAN;
(* Verteilt die events, falls ntig. Wenn behandelt, wird TRUE zurckgegeben,
* andernfalls FALSE
*)
PROCEDURE HandlePendingEvents();
(* Arbeitet aufgelaufene Message-Events ab
*)
PROCEDURE GetTopWindow (VAR wdw, handle : INTEGER);
(* Liefert das Handle des Top-Fensters (direkt ber AES)
* und zustzlich noch das VDI-Handle der Workstation des Fensters.
*)
PROCEDURE IsOwnTop (): BOOLEAN;
(* Liefert zurck, ob ein eigenes Fenster, das vom Windowmanager verwaltet
* wird, das Topwindow ist
*)
PROCEDURE WindowIsIcon (wdw: INTEGER) : BOOLEAN;
(* Liefert TRUE, wenn das Window vorhanden und iconifiziert ist
*)
PROCEDURE ModalWindowTop (): BOOLEAN;
(* Liefert TRUE, wenn das Topwindow ein eigenes und modal ist
*)
PROCEDURE WindowIsShaded (wdw: INTEGER) : BOOLEAN;
(* Liefert TRUE, wenn das Window vorhanden und mittels WindowShade
* geshadet ist (oder auerhalb des Bildschirms liegt)
*)
PROCEDURE WindowIsFullable (wdw: INTEGER) : BOOLEAN;
(* Liefert TRUE, wenn das Window vorhanden und fullbar ist,
* d.h. es hat einen Sizer oder es ist nur in der Queue drin.
*)
PROCEDURE WindowIsCloseable (wdw: INTEGER) : BOOLEAN;
(* Liefert TRUE, wenn das Window vorhanden und schliebar ist.
* Schliebar heit, es hat einen Closer oder es ist in der Windowqueue
*)
PROCEDURE SetWindowIcon (icon : ADDRESS);
(* Setzt das Icon, das in iconifizierten Fenstern gezeichnet wird.
* icon ist die Adresse eines Objektbaumes;
* Bei icon = NIL wird nichts gezeichnet.
*)
PROCEDURE ClickInWindow (x, y: INTEGER; VAR wdw: INTEGER);
(* Liefert das Windowhandle zurck, falls sich an der Position
* x,y ein Fenster befindet (mu nicht dem Modul bekannt sein!)
*)
PROCEDURE ScrollInWdw (wdw: INTEGER;
VAR source: Rectangle;
dir: INTEGER;
amount: INTEGER);
(* Diese Funktion ermglicht das Scrollen innerhalb eines Dokumentes
* unter Bercksichtigung der Rechteckliste und mit automatischem Redraw
* der neu zu zeichnenden Stellen nach dem Scrollen
*)
(* Das Konzept des virtuellen Dokuments:
Intern innerhalb des Moduls wird fr jedes Fenster ein virtuelles
Dokument (VD) verwaltet. Der aktuelle Fensterausschnitt ist immer
nur ein Ausschnitt aus diesem virtuellen Dokument. Intern wird das
ungefhr wie folgt behandelt:
x-Position des Dokumentes
|
v
<---------------- Breite des Dokuments ---------->
+------------------------------------------------+ ^
| | |
| | |
| | |
| | |
| | |
----> | +---------------------+ | |
y-Pos. | | | | |
| | aktueller | | |
| | Ausschnitt | | |
| | | | |
| | | | |
| | | | |
| | | | |
| +---------------------+ | Hhe
| | des
| | Dokuments
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
+------------------------------------------------+ V
Damit die Verwaltung dieses VD auch funktioniert, mssen einige
Parameter gesetzt sein. Die einzelnen Werte fr das Dokument werden
in sogenannten Einheiten verwaltet. Dabei kann man fr x und y Auflsung
unterschiedliche Einheiten angeben. Diese Einheiten sind der xFactor und
der yFactor. So ist es zum Beispiel mglich, die Hhe in Textzeilen anzugeben,
aber die Breite in Pixeln. In dem Fall wre der yFactor (Hhe) = die Hhe einer
Textzeile, und der xFactor (Breite) = 1 (Default).
Ebenso mu man die Hhe und Breite einer Seite in Einheiten fr das Blttern
angeben, und man mu auch noch angeben, um wieviele Einheiten beim
einzelnen Scrollen gescrollt werden soll.
In obigem Beispiel wre dann bei einem normalen Textbildschirm die
Hhe 20 Zeilen und die Breite 600 Pixel. Und beim Scrollen gibt man dann
fr minScrollH eine 1 an (eine Zeile), aber da man nicht Pixelweise seitwrts
scrollen will, dort z.B. eine 8 (fr einen 8 Pixel breiten Zeichensatz).
*)
(* Prozeduren zur Verwaltung und zum Handling des
* virtuellen Dokuments.
*)
PROCEDURE SetDocumentParms (wdw : INTEGER; xFac, yFac: LONGINT);
(* Setzt die Parameter fr die Ausschnittsberechnung
*)
PROCEDURE SetScrollParms (wdw : INTEGER; pageW, pageH, minScrollW, minScrollH : LONGINT);
(* Setzt die Parameter fr das Blttern im Dokument
*)
PROCEDURE GetScrollParms (wdw : INTEGER; VAR pageW, pageH, minScrollW, minScrollH : LONGINT);
(* Erfragt die Parameter fr das Blttern im Dokument
*)
PROCEDURE SetNewDocument (wdw : INTEGER; doc : LongRect; redraw: BOOLEAN);
(* Setzt die aktuellen Dokument-Parameter ohne automatsiches Scrollen
* Wenn redraw = TRUE, wird ein Redraw ber das komplette Fenster ausgelst.
*)
PROCEDURE SetWdwDocument (wdw : INTEGER; doc : LongRect);
(* Setzt die aktuellen Dokument-Parameter.
* Es wird automatisch so gescrollt, das der aktuelle Ausschnitt
* sichtbar ist.
*)
PROCEDURE GetWdwDocument (wdw : INTEGER; VAR doc : LongRect);
(* Erfragt die aktuellen Dokument-Parameter
*)
(* Blttern im dargestellten Dokument
*)
PROCEDURE PageUp (wdw : INTEGER);
(* Es wird um pageH Einheiten hochgeblttert.
*)
PROCEDURE PageDown (wdw : INTEGER);
(* Es wird um pageH Einheiten nach unten geblttert.
*)
PROCEDURE PageLeft (wdw : INTEGER);
(* Es wird um pageW Einheiten nach links geblttert.
*)
PROCEDURE PageRight (wdw : INTEGER);
(* Es wird um pageW Einheiten nach rechts geblttert.
*)
PROCEDURE ScrollUp (wdw : INTEGER; lines : INTEGER);
(* Es wird um lines * minScrollH Einheiten nach oben geblttert.
*)
PROCEDURE ScrollDown (wdw : INTEGER; lines : INTEGER);
(* Es wird um lines * minScrollH Einheiten nach unten geblttert.
*)
PROCEDURE ScrollLeft (wdw : INTEGER; amount : INTEGER);
(* Es wird um amount * minScrollW Einheiten nach links geblttert.
*)
PROCEDURE ScrollRight (wdw : INTEGER; amount : INTEGER);
(* Es wird um amount * minScrollW Einheiten nach links geblttert.
*)
PROCEDURE WdwComps (wdw : INTEGER) : BITSET;
(* Liefert die Window-Elemente zurck
*)
PROCEDURE SnapWdw (wdw : INTEGER);
(* Ruft die Snap-Funktion fr das Fenster auf
*)
PROCEDURE SetWdwSize (wdw : INTEGER; rect : Rectangle);
(* Setzt neue aktuelle Auengre fr das Fenster
*)
PROCEDURE GetWdwSize (wdw : INTEGER; VAR rect : Rectangle);
(* Erfragt aktuelle Auengre fr das Fenster
*)
PROCEDURE SetWdwWork (wdw : INTEGER; rect : Rectangle);
(* Setzt neue aktuelle Arbeitsflchengre fr das Fenster
*)
PROCEDURE GetWdwWork (wdw : INTEGER; VAR rect : Rectangle);
(* Erfragt aktuelle Arbeitsflchengre fr das Fenster
*)
PROCEDURE RedrawWdw (wdw : INTEGER; frame : Rectangle);
(* Zeichnet das Fenster im Bereich Frame neu, beachtet
* Rechteckliste und ruft indirekt die drawProc auf
*)
PROCEDURE FullRedrawWdw (wdw : INTEGER);
(* Zeichnet das Fenster komplett neu, beachtet
* Rechteckliste und ruft indirekt die drawProc auf
*)
PROCEDURE SetWdwInfoline (wdw : INTEGER; info : ARRAY OF CHAR);
(* Setzt die Infozeile fr das Fenster
*)
PROCEDURE SetWdwTitle (wdw : INTEGER; title : ARRAY OF CHAR);
(* Setzt den Fenstertitel
*)
(*------- Menu & Keyboard -----------------------------------------------------*)
PROCEDURE InstallGlobalMenu (tree: ADDRESS; menuP: handleMessProc);
(* Gibt dem Modul die Adresse des Menubaums bekannt. Damit kann dieser dann disablet
* werden, wenn ein modaler Dialog aufgerufen wird.
* Auerdem wird eine Callback-Funktion installiert, die bei Menu-Events aufgerufen
* wird.
* Es wird nur ein Menu und eine Callbackfunktion verwendet, ein Deinstall
* ist daher nicht notwendig, ein erneuter Aufruf berschreibt die
* eingestellten Werte
*)
PROCEDURE DisableMenu (menu: ADDRESS; disable : BOOLEAN);
(* Schaltet einen Menubaum auf enabled oder disabled
* menu = NIL: ein installiertes globales Menu wird disabled oder enabled
*)
PROCEDURE InstallGlobalKeyProc (key : handleGlobalKeyProc);
(* Installiert einen globalen Keyhandler, der dann aufgerufen wird, wenn
* die Taste von keinem Fenster behandelt wurde.
* Wenn Shift und eine andere Sondertaste gedrckt wird, dann wird
* diese Callback-Funktion vor den Fenstern aufgerufen
*)
(*------- QueueModul ----------------------------------------------------------*)
PROCEDURE NewWindowIsTop(handle, apId : INTEGER);
(* Dem Modul wird mitgeteilt, das ein neues Fenster getopt
* wurde. Nur ntig bei nicht vom Modul verwalteten Fenstern
*)
PROCEDURE WindowIsClosed(handle : INTEGER);
(* Dem Modul wird mitgeteilt, das ein Fenster geschlossen
* wurde. Nur ntig bei nicht vom Modul verwalteten Fenstern.
*)
PROCEDURE TopNextWindow();
(* Das nchste Window wird getoppt.
*)
PROCEDURE TopNextPossible() : BOOLEAN;
(* Es wird zurckgeliefert, ob es mglich ist,
* ein anderes Fenster zu toppen.
*)
PROCEDURE GetSecondWdw (VAR wdw : INTEGER): BOOLEAN;
(* Liefert zweitoberstes Fenster zurck.
* Geht nur ber Queue, benutzt nicht die Liste.
* Gibt TRUE zurck, falls erfolgreich.
*)
PROCEDURE GetOwnTopWindow (VAR wdw: INTEGER);
(* Liefert das Topwindow der Applikation zurck *)
PROCEDURE IsInQueue (wdw : INTEGER) : BOOLEAN;
(* Liefert TRUE zurck, wenn das Fenster wdw in
* der verwalteten Queue ist.
*)
PROCEDURE GetApId (wdw : INTEGER; VAR apId : INTEGER) : BOOLEAN;
(* Liefert TRUE zurck, wenn das Fenster bekannt ist, und die
* Applikation-ID der Applikation zum Fenster.
* Funktioniert nur fr fremde Fenster
*)
PROCEDURE FindSpecialTop (hdlTest: queueTestProc): INTEGER;
(* Sucht nach einem bestimmten Fenster von Anfang der Queue
* bis zum Ende. Bricht ab, wenn proc TRUE liefert.
* Gibt das Fensterhandle zurck oder -1
*)
CONST STACKED = 0;
BYSIDE = 1;
OVERLAP = 2;
TILED = 3;
PROCEDURE ArrangeWindows (mode : INTEGER);
(* Ordnet die Fenster an. Es ist einer der
* vorher definierten Anordnungsmodi mglich.
*)
(* Temporre Funktion, um Support von Iconify von MTOS 1.07 Beta einzuschalten
*)
PROCEDURE EnableIconify (enable: BOOLEAN);
(* Drag & Drop Support fr MTOS *)
PROCEDURE WdwInstallDDClient (wdw: INTEGER;
getExts : getExtsProc;
acceptData : acceptDataProc;
writeData : writeDataProc);
(* Ein Fenster installiert fr sich Drag & Drop. Damit untersttzt
* es automatisch Drag & Drop.
*)
PROCEDURE WdwInstallDDServer (wdw: INTEGER;
getHeader : getHeaderProc;
readData : readDataProc);
(* Ein Fenster installiert sich als Server fr Drag & Drop.
* Danach kann es dann die Prozedur WdwDDServe benutzen,
* die Drag & Drop durchfhrt.
*)
PROCEDURE WdwDoesDragDrop (wdw: INTEGER): BOOLEAN;
(* TRUE: Das Fenster untersttzt Drag & Drop
*)
PROCEDURE WdwDDGetExts (wdw: INTEGER; VAR exts: ARRAY OF CHAR);
(* Liefert fr das Wdw die untersttzen Extensions zurck
*)
PROCEDURE WdwDDAcceptData (wdw: INTEGER; hdr: ADDRESS): BOOLEAN;
(* Falls das Window die Daten nach dem Header akzeptiert, dann wird
* TRUE zurckgegeben
*)
PROCEDURE WdwDDWriteData (wdw: INTEGER; VAR data: ADDRESS; dataLen: LONGCARD);
(* Die Daten werden an das Fenster bergeben
*)
PROCEDURE WdwDDServe (wdw: INTEGER; mx, my: INTEGER; kstate: BITSET): BOOLEAN;
(* Initialisiert Drag & Drop als Server. wdw ist das Source-Fenster(!!),
* vorher mu sich das Fenster als Server angemeldet haben. Dann wird
* ber die angemeldeten Prozeduren versucht, Drag & Drop durchzufhren
*)
PROCEDURE SetMagicPCKeyTranslation (setIt: BOOLEAN);
(* Schaltet die Tastenbersetzung fr MagicPC ein *)
END WdwManager.